<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('access_logs', function (Blueprint $table) {
            $table->id();

            // 用户信息
            $table->unsignedBigInteger('user_id')->nullable(); // 用户ID，可能为null（未登录访问）
            $table->string('user_name')->nullable(); // 用户名
            $table->string('user_ip'); // 用户IP地址
            $table->string('user_agent')->nullable(); // 用户代理信息
            $table->string('session_id')->nullable(); // 会话ID

            // 访问信息
            $table->string('method'); // HTTP方法 (GET, POST, PUT, DELETE等)
            $table->string('url'); // 访问的URL
            $table->string('route_name')->nullable(); // 路由名称
            $table->string('controller_action')->nullable(); // 控制器和方法
            $table->text('query_string')->nullable(); // 查询字符串
            $table->json('request_data')->nullable(); // 请求数据（POST/PUT等）

            // 响应信息
            $table->integer('response_code'); // HTTP响应状态码
            $table->integer('response_size')->nullable(); // 响应大小（字节）
            $table->decimal('response_time', 8, 3)->nullable(); // 响应时间（秒）

            // 访问类型
            $table->enum('access_type', ['api', 'page', 'file', 'static'])->default('api');
            $table->string('module_name')->nullable(); // 模块名称
            $table->string('action_name')->nullable(); // 操作名称

            // 设备信息
            $table->string('device_type')->nullable(); // 设备类型 (desktop, mobile, tablet)
            $table->string('browser')->nullable(); // 浏览器
            $table->string('browser_version')->nullable(); // 浏览器版本
            $table->string('os')->nullable(); // 操作系统
            $table->string('country')->nullable(); // 国家
            $table->string('city')->nullable(); // 城市

            // 安全信息
            $table->boolean('is_suspicious')->default(false); // 是否可疑访问
            $table->text('suspicious_reason')->nullable(); // 可疑原因
            $table->json('security_flags')->nullable(); // 安全标记

            // 性能信息
            $table->integer('memory_usage')->nullable(); // 内存使用量（字节）
            $table->integer('db_queries_count')->nullable(); // 数据库查询次数
            $table->decimal('db_queries_time', 8, 3)->nullable(); // 数据库查询总时间

            // 关联对象
            $table->string('related_model')->nullable(); // 相关模型类名
            $table->unsignedBigInteger('related_id')->nullable(); // 相关对象ID

            // 额外信息
            $table->json('metadata')->nullable(); // 元数据
            $table->text('notes')->nullable(); // 备注

            $table->timestamps();

            // 索引
            $table->index(['user_id', 'created_at']);
            $table->index(['access_type', 'created_at']);
            $table->index(['response_code', 'created_at']);
            $table->index(['url']);
            $table->index(['method']);
            $table->index(['is_suspicious']);
            $table->index('created_at');

            // 外键约束
            $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('access_logs');
    }
};
